/**
 * @Identifier.java  COPYRIGHT xiaojian
 * 
 * Created on 2018年3月15日 上午10:31:59
 */
package xj.toolkit.util;

/**
 * 标识符。
 * 
 * @author <a href="mailto:cxj2000@gmail.com">xiaojian.cao</a>
 *
 */
public interface Identifier<T> {

	/**
	 * 得到标识的值。
	 * 
	 * @return
	 */
	T getValue();

	/**
	 * 设置标识的值。
	 * 
	 * @param t
	 */
	void setVaule(T t);

	/**
	 * 以String的形式展现。
	 * 
	 * @return
	 */
	String valueAsString();

	/**
	 * 以int的形式展现。
	 * 
	 * @return
	 */
	int valueAsInt();

	/**
	 * 值作为byte。
	 * 
	 * @return
	 */
	byte[] valueAsByte();

	/**
	 * 从String生成标识。
	 * 
	 * @param id
	 */
	Identifier<?> fromSrting(String id);

	/**
	 * 从字节码生成。
	 * 
	 * @param bArray
	 */
	Identifier<?> fromByte(byte[] bArray);

	/**
	 * 从int生成标识。
	 * 
	 * @param id
	 */
	Identifier<?> fromInt(int id);

	/**
	 * 长度。如果为未知长度，返回-1。
	 * 
	 * @return
	 */
	int length();
}
